package cn.bonoon.kernel.io.devices;

import java.io.OutputStream;

import cn.bonoon.kernel.io.FileStorable;
import cn.bonoon.kernel.io.HttpStorageFile;
import cn.bonoon.kernel.io.StorageInitizlier;

/**
 * 定义一个文件的存储设备
 * @author jackson
 *
 */
public interface RemoteStorageDevice{
	
	/** 对设备进行初始化 */
	void initDevice(StorageInitizlier initizlier, TemporaryStorageCached temporary);

	/** 加载一个文件 */
	boolean load(HttpStorageFile sfile, OutputStream oStream) throws Exception;
	
	/** 是否进行实时的文件同步 */
	boolean isRuntimeSynchronize();
	
	/** 把文件存储到指定的设备上 */
	void store(FileStorable file) throws Exception;
	
	/** 表示如果成功上传到指定的设备或服务器了，本地的存储空间是否可以释放；
	 * 即是否允许删除本地的文件。但具体什么时候删除本地的文件，则是由另外的
	 * 策略决定，一般不会马上释放空间 */
	boolean isLocalspaceReleasable();
}
